Crate append_only_vec

source ·
Expand description

AppendOnlyVec

This is a pretty simple type, which is a vector that you can push into, but cannot modify the elements of. The data structure never moves an element once allocated, so you can push to the vec even while holding references to elements that have already been pushed.

Scaling

  1. Accessing an element is O(1), but slightly more expensive than for a standard Vec.

  2. Pushing a new element amortizes to O(1), but may require allocation of a new chunk.

Example

use append_only_vec::AppendOnlyVec;
static V: AppendOnlyVec<String> = AppendOnlyVec::<String>::new();
let mut threads = Vec::new();
for thread_num in 0..10 {
    threads.push(std::thread::spawn(move || {
         for n in 0..100 {
              let s = format!("thread {} says {}", thread_num, n);
              let which = V.push(s.clone());
              assert_eq!(&V[which], &s);
         }
    }));
}
for t in threads {
   t.join();
}
assert_eq!(V.len(), 1000);

Structs